package ru.vboxdc.impl.vbox;

import com.sun.xml.ws.commons.virtualbox.IVirtualBox;
import com.sun.xml.ws.commons.virtualbox.IWebsessionManager;
import com.sun.xml.ws.commons.virtualbox.IMachine;
import com.sun.xml.ws.commons.virtualbox.ISession;
import org.apache.log4j.Logger;
import org.virtualbox.SessionState;

/**
 * User: lelon
 * Date: 19.02.2009
 * Time: 23:12:36
 */
public class VBoxHelper {
    private String host;
    private String user;
    private String password;
    private IVirtualBox virtualBox;
    private IWebsessionManager websessionManager;

    private static Logger logger = Logger.getLogger(VBoxHelper.class);

    public VBoxHelper(String host, String user, String password) {
        this.host = host;
        this.user = user;
        this.password = password;

        websessionManager = new IWebsessionManager(host);

        try {
            virtualBox = websessionManager.logon(user, password);
            logger.debug("Initialized connection to VirtualBox version " + virtualBox.getVersion());
        } catch (Exception e) {
            //TODO: обработать исключение
            logger.error(e);
        }

    }

    public ISession getSession() {
        return websessionManager.getSessionObject(virtualBox);
    }


    public ISession getMutableSession(IMachine iMachine) {
        ISession session = websessionManager.getSessionObject(virtualBox);
        switch (iMachine.getSessionState()) {

            case CLOSED:
                virtualBox.openSession(session, iMachine.getId());
                break;

            case CLOSING:
                //TODO: необходимо обработать
                break;

            case NULL:
                break;

            case OPEN:
                virtualBox.openExistingSession(session, iMachine.getId());
                break;

            case SPAWNING:
                break;
        }
            return session;
    }


    public IVirtualBox getIVirtualBox() {
        return virtualBox;
    }



    //TODO: необходимо отказать от этих методов (придумать объект, или както подругому "гонять" эти 3 стринга
    public String getHost() {
        return host;
    }

    public String getUser() {
        return user;
    }

    public String getPassword() {
        return password;
    }
}
